﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Financiera
{
    public partial class Form_Moneda : Form
    {
       
        string rutaFinancieraSQL = Conexion.rutaDB;
        string fecha_desde;
        string fecha_hasta;
        

        public Form_Moneda()
        {
            InitializeComponent();
            
        }

        private void cargarMonedaActual(char opcion )
        {
            if (Conexion.ds_financiera.Tables["Moneda_actual"] != null)
                Conexion.ds_financiera.Tables["Moneda_actual"].Clear();

            string ConsultaSQLOperaciones = "Select cod_moneda_a as 'Cod Moneda',descripcion_a as 'Descripcion',valor_compra_a as 'Valor Compra',valor_venta_a as 'Valor Venta',fecha_a as 'Fecha',hora_a as 'Hora'  from Moneda_actual";

            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones,
                                         "Moneda_actual", ref Conexion.ds_financiera);
            switch(opcion){
                case 'n':

                    Grilla_moneda_n.DataSource = Conexion.ds_financiera.Tables["Moneda_actual"];
                    break;
                case 'a':
                    Grilla_moneda_a.DataSource = Conexion.ds_financiera.Tables["Moneda_actual"]; 
                    break;
            }
        }

        private void borrarmoneda(string tabla,string codigo) {
            string ConsultaSQL = "delete from "+tabla+ " where Cod_Moneda_a='" + codigo + "'";
            SqlConnection cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            cn.Close();
        }


        private void btn_Nueva_moneda_Click(object sender, EventArgs e)
        {
            //visible
            p_Nueva_moneda.Visible = true;
            p_historial_moneda.Visible = false;
            p_actualizar_moneda.Visible = false;
            //codigo
            txt_año_n.Text = Conexion.fecha_a;
            txt_mes_n.Text = Conexion.fecha_m;
            txt_dia_n.Text = Conexion.fecha_d;
            cargarMonedaActual('n');

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string ConsultaSQL = "execute Agregar_moneda" + " '" + txt_cod.Text + "','" + txt_descripcion.Text + "'," +
                Convert.ToDouble(txt_valorc.Text) + "," + Convert.ToDouble(txt_valorv.Text) + ",'" + Conexion.fecha_d + "/" + Conexion.fecha_m +
                "/" + Conexion.fecha_a + "','" + Conexion.hora + "'";
            SqlConnection cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            cargarMonedaActual('n');
        }

        private void Form_Moneda_Load(object sender, EventArgs e)
        {
        }

        private void btn_eliminar_moneda_Click(object sender, EventArgs e)
        {
            borrarmoneda("Moneda_actual", Grilla_moneda_n.CurrentRow.Cells[0].Value.ToString());
            cargarMonedaActual('n');
        }     

        
        /// //////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////// ACTUALIZAR MONEDA//////////////////////////////////////////////////
        /// /////////////////////////////////////////////////////////////////////////////////////////////////
       

        

        private void btn_actualizar_moneda_Click(object sender, EventArgs e)
        {   //visual
            p_historial_moneda.Visible = false;
            p_Nueva_moneda.Visible = false;
            p_actualizar_moneda.Visible = true;
            //codigo
            txt_año.Text = Conexion.fecha_a;
            txt_mes.Text = Conexion.fecha_m;
            txt_dia.Text = Conexion.fecha_d;
            
            cargarMonedaActual('a');
        }

        private void grilla_moneda_a_SelectionChanged(object sender, EventArgs e)
        {
            if (Grilla_moneda_a.RowCount > 1)
            {
                txt_valorv_a.Text = Grilla_moneda_a.CurrentRow.Cells[3].Value.ToString();
                txt_valorc_a.Text = Grilla_moneda_a.CurrentRow.Cells[2].Value.ToString();
                txt_desc_a.Text = Grilla_moneda_a.CurrentRow.Cells[1].Value.ToString();
                txt_hora_a.Text = Conexion.hora;
            }
        }

        private void btn_guardar_a_Click(object sender, EventArgs e)
        {
            //Guarda moneda a borrar en el historial de monedas
            string fecha_vs = txt_hora_a.Text;
            Convert.ToDateTime(fecha_vs);
            string ConsultaSQL ="execute Agregar_Historial" + " '" + Grilla_moneda_a.CurrentRow.Cells[0].Value.ToString()+
                "','" +Grilla_moneda_a.CurrentRow.Cells[1].Value.ToString()+ "'," +
                Grilla_moneda_a.CurrentRow.Cells[2].Value+ "," + Grilla_moneda_a.CurrentRow.Cells[3].Value + ",'" + fecha_vs +"','"+ Grilla_moneda_a.CurrentRow.Cells[5].Value.ToString()+ "'";
            SqlConnection cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            cn.Close();

            //Actualiza la moneda anterior moneda anterior

            ConsultaSQL = "execute Actualizar_moneda_actual" + " '" + Grilla_moneda_a.CurrentRow.Cells[0].Value.ToString() + "'," +
                Convert.ToSingle(txt_valorc_a.Text) + "," + Convert.ToSingle(txt_valorv_a.Text) + ",'" + Conexion.fecha_d + "/" + Conexion.fecha_m +
                "/" + Conexion.fecha_a + "','" + Conexion.hora + "','" + txt_desc_a.Text + "'";
            cn.Open();
            comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            cn.Close();
            cargarMonedaActual('a');
        }

 ////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////// HISTORIAL MONEDA ///////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////////////////////


        private void btn_historial_moneda_Click(object sender, EventArgs e)
        {
            p_historial_moneda.Visible = true;
            p_Nueva_moneda.Visible = false;
            p_actualizar_moneda.Visible = false;
            cargarMonedaHistorial();

            //llenacombobox();//llama al método llenacombobox al momento de cargar la forma
        
            //método llenacombobox

            if (cb_Moneda_h.Items.Count > 0)
                cb_Moneda_h.Items.Clear();
            //se declara una variable de tipo SqlConnection
            SqlConnection cn = new SqlConnection();
            //se indica la cadena de conexion
            cn.ConnectionString = Conexion.rutaDB;
            //código para llenar el comboBox
            DataSet ds = new DataSet();
            //indicamos la consulta en SQL
            SqlDataAdapter da = new SqlDataAdapter("SELECT DISTINCT Cod_moneda_h FROM Historial_moneda", cn);
            //se indica el nombre de la tabla
            da.Fill(ds, "Historial_moneda");

            foreach (DataRow row in ds.Tables["Historial_moneda"].Rows)
            {
                cb_Moneda_h.Items.Add(row[0].ToString());
            }
            cb_Moneda_h.Items.Add("Todas");

        }


        private void btn_verhistorial_Click(object sender, EventArgs e)
        {
            if (Conexion.ds_financiera.Tables["Historial_moneda"] != null)
                Conexion.ds_financiera.Tables["Historial_moneda"].Clear();

            //Validar Fechas hasta
            
            if(txt_dia_d.Text == "" && txt_mes_d.Text == "" && txt_año_d.Text == ""){
                fecha_desde="";}
                 
            else 
                if(txt_dia_d.Text != "" && txt_mes_d.Text == "" || txt_año_d.Text == ""){
                MessageBox.Show("Fecha incompleta");}
                else fecha_desde = txt_dia_d.Text + "/" + txt_mes_d.Text + "/" + txt_año_d.Text;
            
            //validar Fecha hasta

            if (txt_dia_h.Text == "" && txt_mes_h.Text == "" && txt_año_h.Text == "")
            {
                fecha_hasta = "";
            }

            else
            {
                if (txt_dia_h.Text != "" && txt_mes_h.Text == "" || txt_año_h.Text == "")
                {
                    MessageBox.Show("Fecha incompleta");
                }
                else fecha_hasta = txt_dia_h.Text + "/" + txt_mes_h.Text + "/" + txt_año_h.Text;
            }

            string ConsultaSQLOperaciones;
            ConsultaSQLOperaciones = "Select n_cambio_h as 'Nº Cambio',cod_moneda_h as 'Cod Moneda',descripcion_h as 'Descripcion',valor_compra_h as 'Valor Compra',valor_venta_h as 'Valor Venta',fecha_h as 'Fecha',hora_h as 'Hora' from Historial_moneda";
            //Construccion de la consulta//
            


            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones+constructorFiltrarHistorial(),
                                         "Historial_moneda", ref Conexion.ds_financiera);

            Grilla_historial.DataSource = Conexion.ds_financiera.Tables["Historial_moneda"];
        }

        private void cargarMonedaHistorial()
        {
            if (Conexion.ds_financiera.Tables["Historial_moneda"] != null)
                Conexion.ds_financiera.Tables["Historial_moneda"].Clear();
            string ConsultaSQLOperaciones = "Select n_cambio_h as 'Nº Cambio',cod_moneda_h as 'Cod Moneda',descripcion_h as 'Descripcion',valor_compra_h as 'Valor Compra',valor_venta_h as 'Valor Venta',fecha_h as 'Fecha',hora_h as 'Hora' from Historial_moneda";

            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones,
                                         "Historial_moneda", ref Conexion.ds_financiera);

            Grilla_historial.DataSource = Conexion.ds_financiera.Tables["Historial_moneda"];
        }

        private string constructorFiltrarHistorial() {

            string ClausulaSQLHistorial = "";

            if (cb_Moneda_h.Text != "" && cb_Moneda_h.Text != "Todas")
                ClausulaSQLHistorial = " Where cod_moneda_h=" +"'"+ cb_Moneda_h.Text+"'";

            

            if (cb_Compra_h.Text != "" && txt_valorcompra_h.Text != "")
                ConstruirClausulaSQL("valor_compra_h",
                                     cb_Compra_h.Text,
                                     txt_valorcompra_h.Text,
                                     ref ClausulaSQLHistorial);

            if (cb_Venta_h.Text != "" && txt_valorventa_h.Text != "")
                ConstruirClausulaSQL("valor_venta_h",
                                     cb_Venta_h.Text,
                                     txt_valorventa_h.Text,
                                     ref ClausulaSQLHistorial);
            // constructor fecha
            
              if (fecha_desde != "")
                {

                    if (ClausulaSQLHistorial == "")
                        ClausulaSQLHistorial = " WHERE ";
                    else
                        ClausulaSQLHistorial += " AND ";

                    ClausulaSQLHistorial += "fecha_h>=" + "'" + fecha_desde + "'";
                } 

             if (fecha_hasta != "")
            {

                if (ClausulaSQLHistorial == "")
                    ClausulaSQLHistorial = " WHERE ";
                else
                    ClausulaSQLHistorial += " AND ";

                ClausulaSQLHistorial += "fecha_h<=" + "'" + fecha_hasta + "'";
            } 
               return ClausulaSQLHistorial.ToString();
        }


        private void ConstruirClausulaSQL(string NombreCampo,
                                         string Operador,
                                         string Valor,
                                         ref string Clausula)
        {
            string d1 = "";  //Delimitador 1
            string d2 = ""; //Delimitador 2
            if (Clausula == "")
                Clausula = Clausula + " WHERE ";
            else
                Clausula = Clausula + " AND ";
            switch (Operador)
            {
                case "Igual a":
                    d1 = " = ";
                    d2 = "";
                    break;
                case "Mayor a":
                    d1 = " > ";
                    d2 = "";
                    break;
                case "Menor a":
                    d1 = " < ";
                    d2 = "";
                    break;
            } 
            Clausula =
                Clausula + NombreCampo + d1 + Valor + d2;
        }


        //VALIDACION DE INGRESO DE TEXTBOX
        private void txt_valorv_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

    }   
}
